#!/bin/bash
#功能：口令有效期
#策略文件：/etc/login.defs
# PASS_MAX_DAYS 90 #密码最长过期天数
# PASS_MIN_DAYS 1 #密码最小过期天数
# PASS_WARN_AGE 7 #密码过期警告天数

SRC_FILE=/etc/login.defs
#######################################################################

#SH
SHPATH=`readlink -f $0`
SHDIR=`dirname $SHPATH`
SHNAME="$0"

#DIR
LOG_DIR=$SHDIR/logs/$SHNAME
TMP_DIR=$SHDIR/temp/$SHNAME
mkdir -p $LOG_DIR $TMP_DIR

#bak
if [ ! -f "/etc/login.defs.init.bak" ];then cp /etc/login.defs /etc/login.defs.init.bak ;fi

#
cat <<EOF > $TMP_DIR/update.txt
PASS_MAX_DAYS 90 #密码最长过期天数
PASS_MIN_DAYS 1 #密码最小过期天数
PASS_WARN_AGE 7 #密码过期警告天数
EOF

while read LINE
do
	LINE_VAR1=`echo $LINE|awk '{print $1}'`
	LINE_VAR2=`echo $LINE|awk '{print $2}'`
	LINE_NUM=`cat -n $SRC_FILE |awk -v var1=$LINE_VAR1  '$2==var1 {print}'|awk '{print $1}'`
	if [ -z "$LINE_NUM" ];then
		echo "$LINE_VAR1 $LINE_VAR2" >> $SRC_FILE
		if [ $? -eq 0 ];then echo "Success,FILE=$SRC_FILE 添加策略: $LINE_VAR1 $LINE_VAR2 成功。";else echo "Error!FILE=$SRC_FILE  添加策略$LINE_VAR1 $LINE_VAR2 失败！请检测文件权限，或使用root用户重试！";fi
	else
		for i in `echo $LINE_NUM`
		do
			DIFF_VAR=`sed -n ${i}p $SRC_FILE | sed "s/$LINE_VAR1//g" |sed "s/ $LINE_VAR2//g"|tr -d " "`
			if [ -z "$DIFF_VAR" ];then
				echo "TIP,FILE=$SRC_FILE 已存在策略: $LINE_VAR1 $LINE_VAR2 跳过操作。"
			else
				sed -i "$i s/^/#/" $SRC_FILE
				sed -i "${i}a $LINE_VAR1 $LINE_VAR2" $SRC_FILE
				if [ $? -eq 0 ];then echo "Success,FILE=$SRC_FILE 添加策略: $LINE_VAR1 $LINE_VAR2 成功。";else echo "Error!FILE=$SRC_FILE  添加策略$LINE_VAR1 $LINE_VAR2 失败！请检测文件权限，或使用root用户重试！";fi
			fi
		done
	fi
done <$TMP_DIR/update.txt